অ্যাপাচি ফ্লিঙ্ক (Apache Flink)

Managed State এবং Keyed State এর ধারণা

Latest Technologies - অ্যাপাচি ফ্লিঙ্ক (Apache Flink) - Stateful Processing | NCTB BOOK

Apache Flink-এ Managed State এবং Keyed State হলো স্টেটফুল স্ট্রিম প্রসেসিংয়ের দুটি গুরুত্বপূর্ণ ধারণা, যা ডেটা প্রক্রিয়াকরণে স্টেট (অর্থাৎ, তথ্য বা মান) সংরক্ষণ এবং ব্যবহারকে সহজ করে তোলে। Flink একটি ডিস্ট্রিবিউটেড স্ট্রিম প্রসেসিং ফ্রেমওয়ার্ক যা উচ্চমাত্রার পারফরম্যান্স এবং ফ্লেক্সিবিলিটি বজায় রেখে স্টেট পরিচালনা করতে সক্ষম।

১. Managed State

Managed State হলো সেই স্টেট যা Flink নিজেই ম্যানেজ করে। Flink-এর Managed State দুটি ভাগে বিভক্ত:

  • Keyed State
  • Operator State

Managed State ব্যবহারের মাধ্যমে Flink স্বয়ংক্রিয়ভাবে স্টেট সংরক্ষণ, পুনরুদ্ধার, এবং ব্যাকআপ (checkpointing) করে, যাতে কোনো ফেইলওভারের পরেও ডেটা এবং প্রসেসিং পুনরায় শুরু করা যায়।

২. Keyed State

Keyed State হলো একটি বিশেষ ধরনের Managed State যা keyBy() অপারেশন ব্যবহারের মাধ্যমে স্ট্রিমকে কী-ভিত্তিক ভাগ করার পর ব্যবহৃত হয়। এটি প্রতিটি কী-ভিত্তিক পার্টিশনের সাথে সম্পর্কিত স্টেট সংরক্ষণ করতে ব্যবহৃত হয়। যখন স্ট্রিম একটি কী দ্বারা ভাগ করা হয়, তখন প্রতিটি কী-এর জন্য Flink আলাদা আলাদা স্টেট তৈরি করে এবং এটি শুধুমাত্র সেই কী-এর ডেটা প্রক্রিয়াকরণে ব্যবহৃত হয়।

Keyed State-এর কয়েকটি ধরন:

  • ValueState: একটি কী-এর জন্য একটি মান ধরে রাখে।
  • ListState: একটি কী-এর জন্য একটি তালিকা ধরে রাখে।
  • MapState: একটি কী এবং মানের পেয়ার ধরে রাখে।
  • ReducingState: একটি কী-এর মানগুলোকে একটি একক মানে কমায়।
  • AggregatingState: কাস্টম অ্যাগ্রিগেশন লজিক প্রয়োগ করে একটি কী-এর জন্য মানগুলো অ্যাগ্রিগেট করে।

Keyed State ব্যবহারের উদাহরণ:

public class CountWithKeyedState extends KeyedProcessFunction<String, String, Tuple2<String, Integer>> {
    private ValueState<Integer> countState;

    @Override
    public void open(Configuration parameters) {
        ValueStateDescriptor<Integer> descriptor = new ValueStateDescriptor<>(
            "countState",
            Integer.class
        );
        countState = getRuntimeContext().getState(descriptor);
    }

    @Override
    public void processElement(String value, Context ctx, Collector<Tuple2<String, Integer>> out) throws Exception {
        Integer currentCount = countState.value();
        if (currentCount == null) {
            currentCount = 0;
        }
        currentCount += 1;
        countState.update(currentCount);
        out.collect(new Tuple2<>(ctx.getCurrentKey(), currentCount));
    }
}

বর্ণনা: এখানে প্রতিটি কী-এর জন্য একটি কাউন্ট স্টেট রাখা হচ্ছে যা প্রতিটি ইনপুট ইভেন্টের সাথে আপডেট হয়।

Keyed State-এর বৈশিষ্ট্য ও সুবিধা:

  • Scalability: Flink স্বয়ংক্রিয়ভাবে কী-ভিত্তিক পার্টিশন তৈরি করে এবং স্টেটকে স্কেল করে।
  • Fault Tolerance: Flink এর চেকপয়েন্ট এবং সেভপয়েন্ট ব্যবস্থার মাধ্যমে স্টেট সংরক্ষণ করে, যা ফেইলওভার থেকে পুনরুদ্ধার করতে সাহায্য করে।
  • Consistency: Flink এর স্টেট ম্যানেজমেন্ট নিশ্চিত করে যে প্রতিটি প্রসেসিং অপারেশন নির্ভুলভাবে ঘটে এবং স্টেটকে সঠিকভাবে আপডেট করে।

উপসংহার

Apache Flink-এ Managed State এবং Keyed State ডেটা স্ট্রিম প্রসেসিং-এর ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে। Managed State স্বয়ংক্রিয় স্টেট ম্যানেজমেন্ট ও ফেইলওভার হ্যান্ডলিং নিশ্চিত করে, যেখানে Keyed State কী-ভিত্তিক স্টেট সংরক্ষণ এবং প্রসেসিংয়ের সুযোগ প্রদান করে, যা বড় আকারের ডেটা প্রসেসিং ও কমপ্লেক্স স্ট্রিমিং অপারেশন পরিচালনা করতে সহায়ক।

Promotion